From f23f7d2f0106882183929c740e4862a1939900d0 Mon Sep 17 00:00:00 2001
From: polwex <polwex@sortug.com>
Date: Thu, 29 May 2025 15:37:22 +0700
Subject: me again but it works!

---
 src/pages/study/[slug].tsx | 82 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 82 insertions(+)
 create mode 100644 src/pages/study/[slug].tsx

(limited to 'src/pages/study/[slug].tsx')

diff --git a/src/pages/study/[slug].tsx b/src/pages/study/[slug].tsx
new file mode 100644
index 0000000..a5af523
--- /dev/null
+++ b/src/pages/study/[slug].tsx
@@ -0,0 +1,82 @@
+import { getContextData } from "waku/middleware/context";
+import { getState } from "@/lib/db";
+import { startStudySession } from "@/actions/srs";
+import StudySession from "@/components/Flashcard/StudySession";
+import { Button } from "@/components/ui/button";
+import { Card } from "@/components/ui/card";
+import LessonSelector from "@/components/srs/LessonSelector";
+import type { PageProps } from "waku/router";
+
+// This is a server component that gets the initial data
+export default async function StudyPage(props: PageProps<"/study/[slug]">) {
+  const lessonId = props.slug;
+  const ctx = getContextData() as any;
+  const userId = ctx?.user?.id;
+  // const state = getState(null);
+
+  // If not logged in, show login required message
+  if (!userId) {
+    return (
+      <div className="container mx-auto py-8">
+        <Card className="p-6 text-center">
+          <h1 className="text-2xl font-bold mb-4">Login Required</h1>
+          <p className="mb-4">
+            You need to be logged in to use the study session feature.
+          </p>
+          <Button asChild>
+            <a href="/login">Login</a>
+          </Button>
+        </Card>
+      </div>
+    );
+  }
+
+  // If no lesson ID provided, show lesson selector
+
+  // Get initial data for the study session
+
+  return (
+    <div className="container mx-auto py-8">
+      <Inner userId={userId} lessonId={lessonId} />
+    </div>
+  );
+}
+
+async function Inner({
+  userId,
+  lessonId,
+}: {
+  userId: number;
+  lessonId: string;
+}) {
+  return (
+    <>
+      {lessonId && Number(lessonId) ? (
+        <StudySessionOuter userId={userId} lessonId={Number(lessonId)} />
+      ) : (
+        <LessonSelector userId={userId} />
+      )}
+    </>
+  );
+}
+async function StudySessionOuter({
+  userId,
+  lessonId,
+}: {
+  userId: number;
+  lessonId: number;
+}) {
+  const initialData = await startStudySession(userId, lessonId, true);
+  console.log({ initialData });
+  if ("ok" in initialData)
+    return (
+      <>
+        <StudySession
+          userId={userId}
+          lessonId={lessonId}
+          initialData={initialData.ok}
+        />
+      </>
+    );
+  else return <p>idk</p>;
+}
-- 
cgit v1.2.3

